//__proto__隐式原型，prototype原型
//每个函数都有一个 prototype 属性
//每一个JavaScript对象(除了 null )都具有的一个属性，叫__proto__,这个属性会指向该对象的原型
//1.实例的__proto__指向函数的prototype(即类的prototype) person1.__proto__===Person.prototype

//2.函数的prototype属性指向了一个对象，包括了constructor和其他属性(比如：name)

//3.任何类都是Object的子类
//所以任何类的prototype的__proto__指向Object的prototype
//4.Object的prototype的__proto__为空
function Person(){//构造函数

}
Person.prototype.name='zhangsan'
Person.age=22
var person1=new Person();
var person2=new Person();
console.log(person1.name,person2.name)
console.log(Person.prototype)
/*
{name: "zhangsan", constructor: ƒ}
name: "zhangsan"
constructor: ƒ Person()
__proto__: Object
*/
console.log(person1.__proto__===Person.prototype) //true
console.log(Person.prototype.constructor===Person)//true
console.log(Person.prototype.__proto__===Object.prototype)//true
console.log(Object.prototype.__proto__)//null
console.log(Function.prototype)
// 顺便学习一个ES5的方法,可以获得对象的原型
console.log(Object.getPrototypeOf(person1) === Person.prototype) // true
console.log(person1.__proto__.__proto__===Object.prototype)


//__proto__
//其次是 __proto__ ，绝大部分浏览器都支持这个非标准的方法访问原型，然而它并不存在于 Person.prototype 中，实际上，它是来自于 Object.prototype ，与其说是一个属性，不如说是一个 getter/setter，当使用 obj.__proto__ 时，可以理解成返回了 Object.getPrototypeOf(obj)。